Elementos da Aula

  1. Introdução ao RStudio
  2. As janelas de navegação do RStudio
  3. Operações matemáticas básicas
  4. Funcionamento básico de uma função
  5. Criação de objetos
  6. Operações com vetores
  7. Classes de objetos
  8. Dicas do RStudio
  9. Lista de Exercícios

1. Introdução ao RStudio

  • O RStudio é uma interface usada para facilitar a sua vida ao utilizar a linguagem R.
  • Ele não é o R em si!
  • Outras opções existem, como o Tinn-R e o Microsoft R.
  • A interface gráfica básica do RStudio.

2. As janelas de navegação do RStudio

O Console

  • É a janela de execução do R, similar a abrir somente o programa base do R.
  • Nesta área você encontra:
    1. O console do R;
    2. A versão do R que está sendo executada;
    3. O diretório de trabalho da sessão.

O Projeto

  • Podemos organizar todo o trabalho que estamos fazendo ao redor de um projeto.
  • Um projeto vai conter todos os arquivos, scripts e figuras necessários para realizarmos uma tarefa (manuscrito, dissertação, tese, análise,…).
  • Existem muitas vantagens em se iniciar um projeto para cada tarefa que estamos fazendo - uma delas é que o diretório utilizado para carregar e salvar arquivos fica sendo consistente entre qualquer computador em que você utilizar o projeto.

O Script

  • É sempre bom escrevermos o código que queremos usar em uma tarefa em um script e, a partir dele, enviar os comandos para o console.
  • Um script pode conter o código e anotaçõees utilizadas para gerar qualquer tipo de computação.
  • Sempre use um script para manter o registro de tudo o que você está fazendo ao realizar uma tarefa.
  • Nesta área você encontra:
    1. A janela do script;
    2. O botão Run, usado para enviar o comando do script ao console;
    3. Um botão para salvar o script em um diretório de sua escolha (ou salvar as alteraçõeses feitas nele);
    4. Um botão de busca e/ou substituição;
    5. Uma aba para facilitar a navegação entre as partes (“capítulos”) do seu script.

Informaçõees relacionadas à sessão

  • Todas as informaçõeses relacionadas aos arquivos e objetos existentes em uma sessão (1, aba “Environment”) e todo o histórico de comandos executados (2, aba “History”) são encontrados aqui.
  • Na aba “Environment”, você encontra utilidades como:
    1. Um botão para excluir arquivos e objetos carregados/criados;
    2. Um botão para importar tabelas e outros arquivos para o ambiente (“Import Dataset”; uso não recomendado).

Outras funcionalidades presentes do RStudio

  • Aqui estão concentradas algumas funcionalidades importantes do RStudio e do R.
    1. Aba “Files”
      1. Contém todos os arquivos em um diretório;
      2. O “..” na primeira linha pode ser utilizado para mover ao diretório acima do qual você observa;
    2. Ainda na aba “Files”, existem botõees que você pode usar para:
      1. Criar uma nova pasta em um diretório (“New folder”);
      2. Deletar um arquivo ou pasta (“Delete”);
      3. Renomear um arquivo ou pasta (“Rename”).
    3. Toda vez que você criar uma figura, ela será apresentado na aba “Plots”; você pode salvar as figura diretamente a partir da aba, mas existem outras formas muito mais adequadas de fazer isso.
    4. A partir da aba “Packages” você pode instalar, atualizar, carregar e/ou acessar o conteúdo de um pacote.
    5. Todo e qualquer arquivo de ajuda de uma função ou pacote é apresentado e descrito na aba “Help”.

3. Operações matemáticas básicas

  • O R pode ser usado para fazer operações matemáticas básicas:
5 + 5 # soma
10 - 5 # subtração
10 / 2 # divisão
5 * 2 # multiplicação
15^(1/3) # raiz cubica
5^2 # elevar a um expoente
15 %/% 2 # número inteiro de uma divisão
pi # valor de pi

4. Funcionamento básico de uma função

  • Uma função representa um conjunto de ações que devem ser feitas para originar um resultado, e são os blocos fundamentais do R: toda e qualquer tarefa é realizada através delas;
  • Toda função é composta por um ou mais argumentos, que controlam e/ou determinam o que a função faz e como ela deve se comportar;
  • Um argumento são valores ou opções necessárias para a execução de uma função.
  • Por exemplo, muitas das funções que realizam operações matemáticas recebem apenas um ou dois argumentos.
abs(x = -5) # valor absoluto
exp(x = 2.70805) # exponencial
sqrt(x = 15) # raiz quadradra
factorial(x = 5) # fatorial: 5!
cos(x = 73) # coseno
sin(x = 92) # seno
tan(x = 3) # tangente
asin(x = 0.8) # arcoseno
log(x = 15, base = 2.70805) # log
choose(n = 5, k = 2) # combinações: retirar k elementos de n possibilidades
  • Mas muitas funções existentes no R recebem um número muito maior de argumentos, que não são necessariamente valores numéricos.
## um exemplo
?install.packages
## ou
help("install.packages")
  • Nem todos os argumentos presentes em uma função precisam ser especificados quando nós à utilizamos, pois argumentos argumentos podem ter sido pré-especificados quando da criação da função, enquanto outros simplesmente não afetam o funcionamento de uma função.
## um exemplo
?read.table
  • Além disso, quando você usar uma função, você pode especificar seus argumentos por posição, nome completo ou nome parcial. Ou seja:
# por nome completo
read.table(file = "nome_do_arquivo", header = TRUE, sep = ",")
# por posição
read.table("nome_do_arquivo", TRUE, ",")
# por nome parcial
read.table("nome_do_arquivo", head = TRUE, ",")

Exercício 1

  1. Instale os pacotes readr e readxl.

5. Criação de objetos

  • Podemos criar uma função através de uma outra função, chamada function.
## uma função para calcular a riqueza de espécies em uma ilha qualquer: S = c.a^z
function(a = 1.2) {
  2 * a ^ 0.4
}
  • Todavia, para que possamos extrair algo de útil dela é importante que a coloquemos em um objeto, utilizando o operador <-.
riqueza <- function(a = 1.2) {
  2 * a ^ 0.4
}
  • Agora podemos descobrir o valor da riqueza em espécies para a ilha com área de 1.2 km².
riqueza()
## [1] 2.151308

Exercício 2

  1. E se nós quiséssemos determinar o valor da riqueza em espécies para uma ilha com 64.38km²? O que poderíamos fazer com a função para obtermos o valor esperado?
  2. Caso nós quiséssemos que esta equação pudesse ser empregada para outros grupos de ilhas, onde os valores de c e de z diferem daqueles na função, que modificações poderíamos fazer à função existente?

  • A maior vantagem de criarmos um objeto está em sua utilidade de atuar como um ‘atalho’ para uma ou várias ações que desenvolvemos em uma sessão.
## somando dois numeros
soma <- 5 + 5
soma
## [1] 10
## elevando a soma ao quadrado
soma ^ 2
## [1] 100

Exercício 3

  1. Qual o valor esperado para a operação 3 + soma ^ 2?
  2. O que acontece quando você atribui o resultado desta última operação ao mesmo objeto chamado soma e, em seguida, repete a operação acima? Por que isso acontece?
  3. Utilize a função rm(soma) e, em seguida, repita a operação do item 1. O que aconteceu? Por que isso aconteceu?

Algumas regras e padrões observados ao usarmos funções e objetos

  • Sobre a criação de objetos:
    • Você só precisa definir uma única vez um nome para um objeto/valor/tarefa/ação;
    • Todo objeto criado é salvo no ambiente da sessão;
    • Cada objeto criado ocupa um espaço e ‘come’ poder de processamento;
    • Sobre-escrever um objeto por outro substitui a informação que existia anteriormente;
    • Sobre-escrever o nome de uma função por um objeto não apaga a função e seu conteúdo, apenas faz com que o seu uso necessite de operadores especiais para que ela seja buscada no ambiente correto.
    • Algumas dicas:
      • Não há como o primeiro caractere do nome de um objeto ser um número;
      • Evite sobre-escrever objetos o máximo que você puder, para evitar comportamentos e resultados inesperados durante uma sessão;
      • Evite nomear um objeto usando o nome de função já existente - você pode não conseguir usar outras funções que dependam a função em questão;
      • Não use espaços em branco no nome de um objeto, opter por usar o ponto ou o underscore para separar palavras: e.g. resultado_anova ou resultado.anova
      • Evite nomes longos para nomear um objeto: e.g. resultado_da_anova_removendo_os_sites_com_os_singletons
      • Evite nomes de objetos que sejam pouco informativos: e.g. analise
  • Sobre as principais fontes de erro no seu código: você é o seu pior inimigo!
    1. Erros de digitação ao chamar um objeto ou função (e.g., read.tab1e ou readtable ao invés de read.table);
    2. Esquecer de criar um objeto antes de rodar uma função;
    3. Especificar um argumento que não existe na função;
    4. Especificar o argumento certo de forma errada (adicionar um número onde na realidade deveria ser algo como VERDADEIRO/FALSO);
    5. Especificar o argumento certo mas com o tipo de objeto errado (como veremos, existem muitos tipos de objetos no ambiente R);
    6. Misturar letras e números no mesmo tipo de objeto (veremos mais isso ao longo do curso).
  • Algumas dicas de boas práticas para evitar erros:
    • Apague objetos que você não vá usar mais em uma sessão - rm(objeto);
    • Evite salvar a área de trabalho ao sair do R (casos especiais justificam salvá-lo);
    • Ao iniciar uma sessão, limpe tudo que está no ambiente global do R - rm(list = ls(all = TRUE));
    • Use a ferramenta de auto-completar do RStudio: comece a escrever o nome da função que você deseja, aperte Tab e navegue pelas opções através das setas;
    • Na dúvida também sobre os argumentos que existem em uma função? Dentro do parenteses que descreve seus argumentos, pressione Tab, navegue pela lista de argumentos e veja uma pequena descrição do que cada um deles deve ser.

Você sabe a diferença entre um error, warning e uma message?

  • error: uma indicação de que um problema fatal ocorreu, levando à parada da execução da função;
  • warning: uma indicação de que algo de errado aconteceu, mas que não é necessariamente fatal - desta forma, a execução da função prossegue;
  • message: uma mensagem ou notificação genérica, que não tem haver com um erro ou problema na execução da função - tudo ocorre de forma natural.
  • error vs warning vs message:
    1. ordem de perigo: warning > message > error (melhor não fazer, do que fazer mal feito).
    2. ordem de desespero de alguém que está iniciando: warning = message = error.

6. Operações com vetores

  • Muitas das operações realizadas pelas funções no R são orientadas a vetores, que são um tipo de objeto com apenas uma dimensão.
  • Um vetor com qualquer tipo de informação pode ser criado através da função c (abreviação para concatenar).
## um vetor com números
c(3, 7, 10, 12)
## [1]  3  7 10 12
## um vetor com palavras
c("RJ", "SP", "ES", "MG")
## [1] "RJ" "SP" "ES" "MG"
  • Podemos criar vetores utilizando algumas facilidades e funções presentes no R.
## uma sequencia de numeros de 1 a 100
1:100
## outra forma de criar esta mesma sequencia de numeros
seq(from = 1, to = 100, by = 1)
  • Podemos atribuir os valores armazenados em um vetor a um objeto, o que facilita o seu uso para operações futuras.
## o vetor com números será atribuído ao objeto numeros
numeros <- 1:100
numeros
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
##  [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
##  [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
##  [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
##  [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
##  [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100
## criaremos o vetor com as siglas dos estados, mas incluiremos um parenteses extra para que o vetor seja impresso assim que criado
(estados <- c("RJ", "SP", "ES", "MG"))
## [1] "RJ" "SP" "ES" "MG"

Exercício 4

  1. Crie uma sequência de números que vá de 1000 até 555, nesta ordem. Armazene este vetor em um objeto.
  2. Crie uma sequência de números ímpares de 1 a 100. Armazene este vetor em um objeto.
  3. Crie uma sequência de números pares de 1 a 20. Armazene este vetor em um objeto chamado pares.

  • Muitas das operações que fizemos até aqui podem ser feitas também com vetores.
log(numeros)
sqrt(numeros)
numeros * 2
numeros + 10
  • Inclusive podemos fazer operações utilizando dois ou mais vetores.
vetor1 <- c(1, 3, 5, 7, 9)
vetor2 <- c(-3, -10, 7, 4, 20)
vetor1 + vetor2
## [1] -2 -7 12 11 29

Exercício 5

  1. Utilize a função rnorm para criar uma sequência com 5 números e atribua o resultado a um objeto.
  2. Crie uma um vetor com dois elementos: o número 0 e o número 1, e atribua este valor a um outro objeto.
  3. Multiplique o vetor do item 1 pelo vetor do item 2. O que acontece?

7. Classes de objetos

  • Um aspecto importante do funcionamento das funções no R é que cada um dos argumentos que encontramos nelas normalmente aceita objetos de uma único classe.
    • numeric, integer e double são objetos que representam números;
    • character são objetos que representam letras e palavras;
    • logical são objetos que representam operadores lógicos, como TRUE ou FALSE.
class(x = numeros)
class(x = c(3.6, 2.1, 2.2))
class(x = estados)
class(x = c(T, F, T, F))
  • O R também possui alguns tipos especiais de classe de objetos, como os fatores. Esta classe de objetos é bastante importante quando utilizamos algumas análises estatísticas e também ao criar figuras.
factor(x = estados) # transformando o vetor estados em um fator
factor(x = c(3.6, 2.1, 2.2, 2.1, 2.2, 3.6, 4)) # transformando um vetor de numeros em um fator
ordered(x = c(3.6, 2.1, 2.2, 2.1, 2.2, 3.6, 4)) # transformando um vetor de numeros em um fator ordenado
  • Podemos perguntar ao R se um objeto pertence a uma classe específica de objeto.
is.numeric(x = numeros)
is.integer(x = numeros)
is.character(x = numeros)
is.logical(x = numeros)
  • Ou podemos fazer a mesma pergunta de forma genérica.
str(object = numeros)
##  int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
class(x = numeros)
## [1] "integer"

Exercício 6

  1. Crie um vetor contendo dois argumentos lógicos, utilizando as aspas ao designar cada elemento desse vetor; em seguida, determine a que classe pertence esse objeto. Repita o mesmo procedimento sem usar as aspas.
  2. Crie um vetor contendo um número, um caractere/palavra e um argumento lógico. A que classe de objeto ele pertence?
  3. Crie um vetor contendo um número e um argumento lógico. A que classe de objeto ele pertence?
  4. Crie um vetor contendo um caractere e um argumento lógico. A que classe de objeto ele pertence?

  • Determinar a que classe de objeto pertence um vetor ou seus elementos pode ser útil para detectar problemas em uma operação que você faça ou, ainda, para realizar operações matemáticas.
sqrt(-2) # NaN
1/0 # Inf
  • Alguns elementos de um objeto podem assumir valores específicos e importantes:
    • NA para definir um valor que não está disponível (“__N__ot __A__vailable“”);
    • NaN para definir um valor que não é número (“__N__ot a __N__umber“);
    • Inf para definir um valor infinito.
  • Podemos perguntar para o R se algum elemento de um vetor pertença a uma daqueles três classes.
is.na(x = c(3, 5, NA, 2))
## [1] FALSE FALSE  TRUE FALSE
is.nan(x = c(1, NaN, 9, 4))
## [1] FALSE  TRUE FALSE FALSE
is.infinite(x = c(Inf, 0, -10, Inf))
## [1]  TRUE FALSE FALSE  TRUE
  • Note que aqui estamos perguntando se um ou mais elementos de um vetor pertencem à cada uma daquelas classes. Como resultado, temos um novo vetor da classe lógico, que marca como TRUE as posições dos elementos que correspondem ao teste feito.
  • Uma das vantagens de termos um vetor lógico como resposta de uma operação é que isto nos permite utilizar este vetor em operações matemáticas.
    • TRUE = 1
    • FALSE = 0
## quantos valores NA existem nesse vetor?
sum(is.na(x = c(3, 5, NA, 2)))
## [1] 1
  • Veremos mais sobre o uso de testes lógicos como esses e similares em outras aulas.

Exercício 7

  1. O que acontece quando usamos a expressão sum(!is.na(c(3, 5, NA, 2)))? O que esse valor representa?
  2. Simule 100 números aleatórios que sigam uma distribuição normal, e que tenham média 0 e desvio padrão 5. Tire o log dos elementos deste vetor e responda: quantos valores existem de fato deste vetor (isto é, não são NA, nem NaN e nem Inf. Utilize um seed de 33 para essa simulação.

8. Algumas dicas do RStudio

  1. Use sempre um projeto para organizar os seus scripts;
  2. Organize seu script em “capítulos” - para isso, utilize o atalho do teclado: Command + Shift + r no MAC ou Control + Shift + r no Windows;
  3. Adicione comentários ao seu script sempre que puder, através do #.
  4. Ao invés de ficar pressionando o botão Run para enviar os comandos do script para o console, utilize Command + Enter no MAC ou Control + Enter no Windows;
  5. Para ver os últimos comandos lançados no console, coloque o cursor lá e utilize Command + Seta para cima no MAC ou Control + Seta para cima no Windows;
  6. Na dúvida sobre uma função? Coloque o curso em cima dela (no console ou no script) e pressione Function + F1 no MAC ou F1 no Windows;
  7. Quer apagar tudo que está escrito no seu console? Use Control + L no MAC ou no Windows.